// templates_card/alert_card_renderer.go
package templates_card

//这段代码是负责模板渲染的工作

import (
	"encoding/json"
	"fmt"
	"v2/config"
	"v2/model"
)

// AlertCardRenderer 告警卡片渲染器
type AlertCardRenderer struct{}

// NewAlertCardRenderer 创建告警卡片渲染器
func NewAlertCardRenderer() *AlertCardRenderer {
	return &AlertCardRenderer{}
}

// FormatTags 格式化标签信息
func (r *AlertCardRenderer) FormatTags(tagsMap map[string]string) string {
	if len(tagsMap) == 0 {
		return "无标签"
	}

	var result string
	for k, v := range tagsMap {
		result += fmt.Sprintf("- `%s`: `%s`\n", k, v)
	}
	return result
}

// RenderAlertCard 渲染告警卡片
func (r *AlertCardRenderer) RenderAlertCard(alert model.AlertInfo) ([]byte, error) {
	// 构建模板变量映射
	templateVars := map[string]string{
		"rule_name":      alert.RuleName,
		"alert_level":    alert.SeverityText,
		"formatted_time": alert.FormattedTime,
		"trigger_value":  alert.TriggerValue,
		"group_name":     alert.GroupName,
		"tags":           r.FormatTags(alert.TagsMap),
		"alert_id":       alert.ID,
	}

	// 创建卡片对象 - 使用飞书API要求的格式
	card := map[string]interface{}{
		"type": "template",
		"data": map[string]interface{}{
			"template_id":       config.Global.Notifier.FeiShuStream.AlertCardTemplateID,
			"template_variable": templateVars,
		},
	}

	// 序列化为JSON
	return json.Marshal(card)
}

// RenderResolvedCard 渲染已解决的卡片
func (r *AlertCardRenderer) RenderResolvedCard(variables map[string]interface{}) ([]byte, error) {
	// 创建卡片对象 - 使用飞书API要求的格式
	card := map[string]interface{}{
		"type": "template",
		"data": map[string]interface{}{
			"template_id":       config.Global.Notifier.FeiShuStream.AlertResolvedCardTemplateID,
			"template_variable": variables,
		},
	}

	// 序列化为JSON
	return json.Marshal(card)
}

// RenderClaimedCard 渲染已认领的卡片
func (r *AlertCardRenderer) RenderClaimedCard(variables map[string]interface{}) ([]byte, error) {
	// 创建卡片对象
	card := map[string]interface{}{
		"type": "template",
		"data": map[string]interface{}{
			"template_id":       config.Global.Notifier.FeiShuStream.AlertClaimedCardTemplateID,
			"template_variable": variables,
		},
	}

	// 序列化为JSON
	return json.Marshal(card)
}

// FormatClaimInfo 格式化认领信息
func (r *AlertCardRenderer) FormatClaimInfo(claimedTime, claimerName string) string {
	return fmt.Sprintf("已由 %s 于 %s 认领", claimerName, claimedTime)
}

// RenderMutedCard 渲染已屏蔽的卡片
func (r *AlertCardRenderer) RenderMutedCard(variables map[string]interface{}) ([]byte, error) {
	// 创建卡片对象
	card := map[string]interface{}{
		"type": "template",
		"data": map[string]interface{}{
			"template_id":       config.Global.Notifier.FeiShuStream.AlertMutedCardTemplateID,
			"template_variable": variables,
		},
	}

	// 序列化为JSON
	return json.Marshal(card)
}
